Remove paravirtualization of ar.kr registers (may need hyperprivop for
authordjm@kirby.fc.hp.com <djm@kirby.fc.hp.com>
Wed, 21 Sep 2005 19:41:25 +0000 (13:41 -0600)
committerdjm@kirby.fc.hp.com <djm@kirby.fc.hp.com>
Wed, 21 Sep 2005 19:41:25 +0000 (13:41 -0600)
mov_to_kr later)
Signed-off by: Dan Magenheimer <dan.magenheimer@hp.com>

linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S
linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S
linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h
linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h

index cdc0e85b03084e5970543df8da1f3484bbf73db7..18d3fb35ce1e9f59777030dbee2dcc4df7e5ffd6 100644 (file)
@@ -53,13 +53,7 @@ GLOBAL_ENTRY(ia64_switch_to)
 
        adds r22=IA64_TASK_THREAD_KSP_OFFSET,r13
        movl r25=init_task
-#ifdef CONFIG_XEN
-       movl r27=XSI_KR0+(IA64_KR_CURRENT_STACK*8)
-       ;;
-       ld8 r27=[r27]
-#else
        mov r27=IA64_KR(CURRENT_STACK)
-#endif
        adds r21=IA64_TASK_THREAD_KSP_OFFSET,in0
        dep r20=0,in0,61,3              // physical address of "next"
        ;;
@@ -86,13 +80,7 @@ GLOBAL_ENTRY(ia64_switch_to)
 (p6)   srlz.d
 #endif
        ld8 sp=[r21]                    // load kernel stack pointer of new task
-#ifdef CONFIG_XEN
-       movl r8=XSI_KR0+(IA64_KR_CURRENT*8)
-       ;;
-       st8 [r8]=in0
-#else
        mov IA64_KR(CURRENT)=in0        // update "current" application register
-#endif
        mov r8=r13                      // return pointer to previously running task
        mov r13=in0                     // set "current" pointer
        ;;
@@ -127,16 +115,13 @@ GLOBAL_ENTRY(ia64_switch_to)
        st8 [r8]=in0                     // VA of next task...
        ;;
        mov r25=IA64_TR_CURRENT_STACK
-       movl r8=XSI_KR0+(IA64_KR_CURRENT_STACK*8)
-       ;;
-       st8 [r8]=r26
 #else
        mov cr.itir=r25
        mov cr.ifa=in0                  // VA of next task...
        ;;
        mov r25=IA64_TR_CURRENT_STACK
-       mov IA64_KR(CURRENT_STACK)=r26  // remember last page we mapped...
 #endif
+       mov IA64_KR(CURRENT_STACK)=r26  // remember last page we mapped...
        ;;
        itr.d dtr[r25]=r23              // wire in new mapping...
        br.cond.sptk .done
@@ -573,14 +558,7 @@ GLOBAL_ENTRY(ia64_leave_kernel)
        bsw.0                   // switch back to bank 0 (no stop bit required beforehand...)
 #endif
        ;;
-#ifdef CONFIG_XEN
-(pUStk)        movl r18=XSI_KR0+(IA64_KR_CURRENT*8)
-       ;;
-(pUStk)        ld8 r18=[r18]
-       ;;
-#else
 (pUStk)        mov r18=IA64_KR(CURRENT)// M2 (12 cycle read latency)
-#endif
        adds r16=PT(CR_IPSR)+16,r12
        adds r17=PT(CR_IIP)+16,r12
 
index 435d9955e4c2712de49b7797ea1bd57fb49bde9e..a747e5c7c23235a8d9c5dd19a7fc24b5ccc654c8 100644 (file)
@@ -123,13 +123,7 @@ ENTRY(vhpt_miss)
        rsm psr.dt                              // use physical addressing for data
 #endif
        mov r31=pr                              // save the predicate registers
-#ifdef CONFIG_XEN
-       movl r19=XSI_KR0+(IA64_KR_PT_BASE*8)    // get the page table base address
-       ;;
-       ld8 r19=[r19]
-#else
        mov r19=IA64_KR(PT_BASE)                // get page table base address
-#endif
        shl r21=r16,3                           // shift bit 60 into sign bit
        shr.u r17=r16,61                        // get the region number into r17
        ;;
@@ -573,13 +567,7 @@ ENTRY(nested_dtlb_miss)
 #else
        rsm psr.dt                              // switch to using physical data addressing
 #endif
-#ifdef CONFIG_XEN
-       movl r19=XSI_KR0+(IA64_KR_PT_BASE*8)    // get the page table base address
-       ;;
-       ld8 r19=[r19]
-#else
        mov r19=IA64_KR(PT_BASE)                // get the page table base address
-#endif
        shl r21=r16,3                           // shift bit 60 into sign bit
        ;;
        shr.u r17=r16,61                        // get the region number into r17
@@ -968,6 +956,7 @@ ENTRY(break_fault)
         * to prevent leaking bits from kernel to user level.
         */
        DBG_FAULT(11)
+       mov r16=IA64_KR(CURRENT)                // r16 = current task; 12 cycle read lat.
 #ifdef CONFIG_XEN
        movl r31=XSI_IPSR
        ;;
@@ -983,11 +972,7 @@ ENTRY(break_fault)
        mov r27=ar.rsc
        mov r26=ar.pfs
        ;;
-       adds r31=(XSI_KR0+(IA64_KR_CURRENT*8))-XSI_IIM,r31
-       ;;
-       ld8 r16=[r31]                           // r16 = current task
 #else
-       mov r16=IA64_KR(CURRENT)                // r16 = current task; 12 cycle read lat.
        mov r17=cr.iim
        mov r18=__IA64_BREAK_SYSCALL
        mov r21=ar.fpsr
index 39ace547860643564d7d8f4126190c89c4d4bdd7..c6df57e9be2c3dba7ff1131d0edf0861d7bf468a 100644 (file)
  */
 #ifdef CONFIG_XEN
 #define DO_SAVE_MIN(COVER,SAVE_IFS,EXTRA)                                                      \
-       /*MINSTATE_GET_CURRENT(r16);    /* M (or M;;I) */                                       \
-       movl r16=XSI_KR0+(IA64_KR_CURRENT*8);;                                                  \
-       ld8 r16=[r16];;                                                                         \
+       MINSTATE_GET_CURRENT(r16);      /* M (or M;;I) */                                       \
        mov r27=ar.rsc;                 /* M */                                                 \
        mov r20=r1;                     /* A */                                                 \
        mov r25=ar.unat;                /* M */                                                 \
        ;;                                                                                      \
 .mem.offset 0,0; st8.spill [r16]=r13,16;                                                       \
 .mem.offset 8,0; st8.spill [r17]=r21,16;       /* save ar.fpsr */                              \
-       /* mov r13=IA64_KR(CURRENT);    /* establish `current' */                               \
-       movl r21=XSI_KR0+(IA64_KR_CURRENT*8);;                                                  \
-       ld8 r13=[r21];;                                                                         \
+       mov r13=IA64_KR(CURRENT);       /* establish `current' */                               \
        ;;                                                                                      \
 .mem.offset 0,0; st8.spill [r16]=r15,16;                                                       \
 .mem.offset 8,0; st8.spill [r17]=r14,16;                                                       \
index d4a44490e07d081006b2c4e16dc85b4d28e3c83b..083672d1fd4f6bddde3815a55fdaa2468eaf05d4 100644 (file)
@@ -93,9 +93,8 @@ extern void xen_set_eflag(unsigned long);     /* see xen_ia64_setreg */
        XEN_HYPER_SSM_I;                                                \
 })
 
-/* kernel register paravirtualization may soon go away */
-#define xen_get_kr(regnum) (((unsigned long *)(XSI_KR0))[regnum])
-#define xen_set_kr(regnum,val) ((((unsigned long *)(XSI_KR0))[regnum]) = val)
+// for now, just use privop.  may use hyperprivop later
+#define xen_set_kr(regnum,val) (__ia64_setreg(regnum,val))
 
 /* turning off interrupts can be paravirtualized simply by writing
  * to a memory-mapped virtual psr.i bit (implemented as a 16-bit bool) */
@@ -168,11 +167,6 @@ extern unsigned long xen_get_rr(unsigned long index);
        __u64 ia64_intri_res;                                           \
                                                                        \
        switch(regnum) {                                                \
-       case _IA64_REG_AR_KR0 ... _IA64_REG_AR_KR7:                     \
-               ia64_intri_res = (running_on_xen) ?                     \
-                       xen_get_kr((regnum-_IA64_REG_AR_KR0)) :         \
-                       __ia64_getreg(regnum);                          \
-               break;                                                  \
        case _IA64_REG_CR_IVR:                                          \
                ia64_intri_res = (running_on_xen) ?                     \
                        xen_get_ivr() :                                 \